home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / TransferPanel.c < prev    next >
C/C++ Source or Header  |  1995-09-29  |  16KB  |  685 lines

  1. /*
  2. **    TransferPanel.c
  3. **
  4. **    File transfer control panel support routines
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. STATIC BYTE LastStatus        = -1;
  13. STATIC LONG TransferInfoCount    = 0;
  14.  
  15. STATIC ULONG __saveds __asm
  16. ListViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct Node *Node)
  17. {
  18.         /* We only know how to redraw lines. */
  19.  
  20.     if(Msg -> lvdm_MethodID == LV_DRAW)
  21.     {
  22.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  23.         LONG         Left    = Msg -> lvdm_Bounds . MinX,
  24.                  Top    = Msg -> lvdm_Bounds . MinY,
  25.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  26.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  27.                  FgPen,BgPen,
  28.                  Len,LabelLen;
  29.         STRPTR         String = Node -> ln_Name;
  30.  
  31.             /* Determine the rendering pens. */
  32.  
  33.         switch(Msg -> lvdm_State)
  34.         {
  35.             case LVR_SELECTEDDISABLED:
  36.             case LVR_NORMALDISABLED:
  37.             case LVR_NORMAL:
  38.  
  39.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  40.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  41.                 break;
  42.  
  43.             case LVR_SELECTED:
  44.  
  45.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  46.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  47.                 break;
  48.         }
  49.  
  50.         SetABPenDrMd(RPort,BgPen,BgPen,JAM2);
  51.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  52.  
  53.         Left    += 2;
  54.         Width    -= 2;
  55.  
  56.             /* Is this an error message? */
  57.  
  58.         if(*String++ == '*' && BgPen != Msg -> lvdm_DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN])
  59.             FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN];
  60.  
  61.             /* Determine length of vanilla name. */
  62.  
  63.         LabelLen = strlen(String);
  64.  
  65.             /* Try to make it fit. */
  66.  
  67.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  68.             LabelLen--;
  69.  
  70.             /* Print the vanilla name if possible. */
  71.  
  72.         if(LabelLen)
  73.         {
  74.             SetAPen(RPort,FgPen);
  75.  
  76.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  77.             Text(RPort,String,LabelLen);
  78.  
  79.             Left    += Len;
  80.             Width    -= Len;
  81.         }
  82.  
  83.             /* Fill the area to follow the vanilla name. */
  84.  
  85.         if(Width > 0)
  86.         {
  87.             SetAPen(RPort,BgPen);
  88.  
  89.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  90.         }
  91.  
  92.             /* If the item happens to be disabled, draw the cross-hatch
  93.              * pattern across it.
  94.              */
  95.  
  96.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  97.         {
  98.             SetABPenDrMd(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN],0,JAM1);
  99.  
  100.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  101.  
  102.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  103.  
  104.             SetAfPt(RPort,NULL,0);
  105.         }
  106.  
  107.         return(LVCB_OK);
  108.     }
  109.     else
  110.         return(LVCB_UNKNOWN);
  111. }
  112.  
  113.     /* AddTransferInfo(STRPTR Message,...):
  114.      *
  115.      *    Add another entry to the transfer information list.
  116.      */
  117.  
  118. VOID __stdargs
  119. AddTransferInfo(BOOLEAN Error,STRPTR Message,...)
  120. {
  121.     STATIC UBYTE __far TempBuffer[256];
  122.  
  123.     struct Node    *Node;
  124.     va_list         VarArgs;
  125.  
  126.     if(Kick30)
  127.     {
  128.         va_start(VarArgs,Message);
  129.         VSPrintf(&TempBuffer[1],Message,VarArgs);
  130.         va_end(VarArgs);
  131.  
  132.         if(Error)
  133.             TempBuffer[0] = '*';
  134.         else
  135.             TempBuffer[0] = ' ';
  136.     }
  137.     else
  138.     {
  139.         va_start(VarArgs,Message);
  140.         VSPrintf(TempBuffer,Message,VarArgs);
  141.         va_end(VarArgs);
  142.     }
  143.  
  144.     if(Node = CreateNode(TempBuffer))
  145.     {
  146.         LT_SetAttributes(TransferHandle,GAD_TRANSFER_INFORMATION_LIST,
  147.             GTLV_Labels,    ~0,
  148.         TAG_DONE);
  149.  
  150.         if(TransferInfoCount == 100)
  151.         {
  152.             FreeVecPooled(RemHead(&TransferInfoList));
  153.  
  154.             TransferInfoCount = 99;
  155.         }
  156.  
  157.         AddTail(&TransferInfoList,Node);
  158.  
  159.         LT_SetAttributes(TransferHandle,GAD_TRANSFER_INFORMATION_LIST,
  160.             GTLV_Labels,        &TransferInfoList,
  161.             GTLV_Top,        TransferInfoCount,
  162.             GTLV_MakeVisible,    TransferInfoCount,
  163.         TAG_DONE);
  164.  
  165.         TransferInfoCount++;
  166.     }
  167. }
  168.  
  169.     /* TransferPanel(STRPTR Title):
  170.      *
  171.      *    Open the transfer window.
  172.      */
  173.  
  174. BYTE __regargs
  175. TransferPanel(STRPTR Title)
  176. {
  177.     if(TransferWindow)
  178.         return(TRUE);
  179.     else
  180.     {
  181.         STATIC struct Hook ListViewHook =
  182.         {
  183.             {NULL},
  184.             (HOOKFUNC)ListViewRender
  185.         };
  186.  
  187.         TransferFailed = TransferAborted = FALSE;
  188.  
  189.         if(Status != STATUS_DOWNLOAD && Status != STATUS_UPLOAD)
  190.         {
  191.             LastStatus = Status;
  192.  
  193.             Status = STATUS_DOWNLOAD;
  194.         }
  195.         else
  196.             LastStatus = -1;
  197.  
  198.         if(Window)
  199.             TransferHandle = LT_CreateHandleTags(Window -> WScreen,LH_LocaleHook,&LocaleHook,TAG_DONE);
  200.         else
  201.             TransferHandle = LT_CreateHandleTags(NULL,LH_LocaleHook,&LocaleHook,TAG_DONE);
  202.  
  203.         if(TransferHandle)
  204.         {
  205.             struct IBox Bounds;
  206.  
  207.             LT_New(TransferHandle,
  208.                 LA_Type,    VERTICAL_KIND,
  209.             TAG_DONE);
  210.             {
  211.                 LT_New(TransferHandle,
  212.                     LA_Type,    VERTICAL_KIND,
  213. /*                    LA_LabelID,    MSG_V36_1509,*/
  214.                 TAG_DONE);
  215.                 {
  216.                     LT_New(TransferHandle,
  217.                         LA_Type,        VERTICAL_KIND,
  218.                     TAG_DONE);
  219.                     {
  220.                         UBYTE    LocalBuffer[60];
  221.                         WORD    Len;
  222.  
  223.                         strcpy(LocalBuffer,FilePart(LastXprLibrary));
  224.  
  225.                         if((Len = strlen(LocalBuffer)) > 3)
  226.                         {
  227.                             UBYTE    ProtocolBuffer[60];
  228.                             WORD    i;
  229.  
  230.                             strcpy(ProtocolBuffer,&LocalBuffer[3]);
  231.  
  232.                             for(i = 0 ; i < Len - 3 ; i++)
  233.                             {
  234.                                 if(ProtocolBuffer[i] == '.')
  235.                                 {
  236.                                     ProtocolBuffer[i] = 0;
  237.  
  238.                                     break;
  239.                                 }
  240.                             }
  241.  
  242.                             ProtocolBuffer[0] = ToUpper(ProtocolBuffer[0]);
  243.  
  244.                             SPrintf(LocalBuffer,"[%s]",ProtocolBuffer);
  245.                         }
  246.                         else
  247.                             strcpy(LocalBuffer,"-");
  248.  
  249.                         LT_New(TransferHandle,
  250.                             LA_Type,    TEXT_KIND,
  251.                             LA_LabelID,    MSG_TRANSFERPANEL_PROTOCOL_TXT,
  252.                             LA_Chars,    50,
  253.                             LA_ID,        GAD_TRANSFER_PROTOCOL,
  254.                             GTTX_Text,    LocalBuffer,
  255.                             GTTX_CopyText,    TRUE,
  256.                             GTTX_Border,    TRUE,
  257.                         TAG_DONE);
  258.  
  259.                         LT_New(TransferHandle,
  260.                             LA_Type,    LISTVIEW_KIND,
  261.                             LA_LabelID,    MSG_TRANSFERPANEL_INFORMATION_GAD,
  262.                             LA_LabelPlace,    PLACE_LEFT,
  263.                             LA_ID,        GAD_TRANSFER_INFORMATION_LIST,
  264.                             LA_Chars,    50,
  265.                             LA_Lines,    2,
  266.                             LALV_MaxGrowX,    70,
  267.                             LALV_MaxGrowY,    10,
  268.                             LALV_CursorKey,    TRUE,
  269.                             GTLV_ReadOnly,    TRUE,
  270.                             GTLV_CallBack,    &ListViewHook,
  271.                             GTLV_MaxPen,    MAX(TransferHandle -> DrawInfo -> dri_Pens[BLOCKPEN],MAX(TransferHandle -> DrawInfo -> dri_Pens[TEXTPEN],MAX(TransferHandle -> DrawInfo -> dri_Pens[BACKGROUNDPEN],MAX(TransferHandle -> DrawInfo -> dri_Pens[FILLTEXTPEN],MAX(TransferHandle -> DrawInfo -> dri_Pens[FILLPEN],TransferHandle -> DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN]))))),
  272.                         TAG_DONE);
  273.  
  274.                         LT_New(TransferHandle,
  275.                             LA_Type,    XBAR_KIND,
  276.                         TAG_DONE);
  277.  
  278.                         LT_EndGroup(TransferHandle);
  279.                     }
  280.  
  281.                     LT_New(TransferHandle,
  282.                         LA_Type,    VERTICAL_KIND,
  283.                     TAG_DONE);
  284.                     {
  285.                         LT_New(TransferHandle,
  286.                             LA_Type,        BOX_KIND,
  287.                             LA_ID,            GAD_TRANSFER_FILE,
  288.                             LA_Chars,        50,
  289.                             LABX_FirstLabel,    MSG_TRANSFERPANEL_FILE_TXT,
  290.                             LABX_LastLabel,        MSG_TRANSFERPANEL_COMPLETION_TIME_TXT,
  291.                             LABX_ReserveSpace,    TRUE,
  292.                         TAG_DONE);
  293.  
  294.                         LT_New(TransferHandle,
  295.                             LA_Type,    XBAR_KIND,
  296.                         TAG_DONE);
  297.  
  298.                         LT_EndGroup(TransferHandle);
  299.                     }
  300.  
  301.                     LT_New(TransferHandle,
  302.                         LA_Type,    HORIZONTAL_KIND,
  303.                     TAG_DONE);
  304.                     {
  305.                         LT_New(TransferHandle,
  306.                             LA_Type,    VERTICAL_KIND,
  307.                         TAG_DONE);
  308.                         {
  309.                             LT_New(TransferHandle,
  310.                                 LA_Type,        BOX_KIND,
  311.                                 LA_ID,            GAD_TRANSFER_SIZE,
  312.                                 LA_Chars,        15,
  313.                                 LABX_FirstLabel,    MSG_TRANSFERPANEL_FILE_SIZE_TXT,
  314.                                 LABX_LastLabel,        MSG_TRANSFERPANEL_BLOCKS_TRANSFERRED_TXT,
  315.                                 LABX_ReserveSpace,    TRUE,
  316.                             TAG_DONE);
  317.  
  318.                             LT_New(TransferHandle,
  319.                                 LA_Type,        BOX_KIND,
  320.                                 LA_ID,            GAD_TRANSFER_TOTALTIME,
  321.                                 LABX_FirstLabel,    MSG_TRANSFERPANEL_ESTIMATED_TIME_TXT,
  322.                                 LABX_LastLabel,        MSG_TRANSFERPANEL_ELAPSED_TIME_TXT,
  323.                                 LABX_ReserveSpace,    TRUE,
  324.                             TAG_DONE);
  325.  
  326.                             LT_New(TransferHandle,
  327.                                 LA_Type,    GAUGE_KIND,
  328.                                 LA_ID,        GAD_TRANSFER_PERCENT,
  329.                                 LA_LabelID,    MSG_TRANSFERPANEL_DATA_TRANSFERRED_GAD,
  330.                                 LAGA_InfoLength,4,
  331.                             TAG_DONE);
  332.  
  333.                             LT_EndGroup(TransferHandle);
  334.                         }
  335.  
  336.                         LT_New(TransferHandle,
  337.                             LA_Type,        VERTICAL_KIND,
  338.                             LAGR_LastAttributes,    TRUE,
  339.                         TAG_DONE);
  340.                         {
  341.                             LT_New(TransferHandle,
  342.                                 LA_Type,        BOX_KIND,
  343.                                 LA_ID,            GAD_TRANSFER_SECONDS,
  344.                                 LA_Chars,        15,
  345.                                 LABX_FirstLabel,    MSG_TRANSFERPANEL_CHARACTERS_PER_SECOND_TXT,
  346.                                 LABX_LastLabel,        MSG_TRANSFERPANEL_BLOCK_SIZE_TXT,
  347.                                 LABX_ReserveSpace,    TRUE,
  348.                             TAG_DONE);
  349.  
  350.                             LT_New(TransferHandle,
  351.                                 LA_Type,        BOX_KIND,
  352.                                 LA_ID,            GAD_TRANSFER_ERRORS,
  353.                                 LABX_FirstLabel,    MSG_TRANSFERPANEL_NUMBER_OF_ERRORS_TXT,
  354.                                 LABX_LastLabel,        MSG_TRANSFERPANEL_NUMBER_OF_TIMEOUTS_TXT,
  355.                                 LABX_ReserveSpace,    TRUE,
  356.                             TAG_DONE);
  357.  
  358.                             LT_New(TransferHandle,
  359.                                 LA_Type,    GAUGE_KIND,
  360.                                 LA_ID,        GAD_TRANSFER_TIME,
  361.                                 LA_LabelID,    MSG_TRANSFERPANEL_TIME_TO_GO_GAD,
  362.                                 LAGA_InfoLength,8,
  363.                             TAG_DONE);
  364.  
  365.                             LT_EndGroup(TransferHandle);
  366.                         }
  367.  
  368.                         LT_EndGroup(TransferHandle);
  369.                     }
  370.  
  371.                     LT_EndGroup(TransferHandle);
  372.                 }
  373.  
  374.                 LT_New(TransferHandle,
  375.                     LA_Type,VERTICAL_KIND,
  376.                 TAG_DONE);
  377.                 {
  378.                     LT_New(TransferHandle,
  379.                         LA_Type,    XBAR_KIND,
  380.                         LAXB_FullSize,    TRUE,
  381.                     TAG_DONE);
  382.  
  383.                     LT_EndGroup(TransferHandle);
  384.                 }
  385.  
  386.                 LT_New(TransferHandle,LA_Type,HORIZONTAL_KIND,
  387.                     LAGR_Spread,    TRUE,
  388.                 TAG_DONE);
  389.                 {
  390.                     LT_New(TransferHandle,
  391.                         LA_Type,    BUTTON_KIND,
  392.                         LA_LabelID,    MSG_TRANSFERPANEL_SKIP_CURRENT_FILE_GAD,
  393.                         LA_ID,        GAD_TRANSFER_SKIP,
  394.                         LABT_ExtraFat,    TRUE,
  395.                     TAG_DONE);
  396.  
  397.                     LT_New(TransferHandle,
  398.                         LA_Type,    BUTTON_KIND,
  399.                         LA_LabelID,    MSG_TRANSFERPANEL_ABORT_CURRENT_FILE_GAD,
  400.                         LA_ID,        GAD_TRANSFER_ABORT_FILE,
  401.                         LABT_ExtraFat,    TRUE,
  402.                     TAG_DONE);
  403.  
  404.                     LT_New(TransferHandle,
  405.                         LA_Type,    BUTTON_KIND,
  406.                         LA_LabelID,    MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  407.                         LA_ID,        GAD_TRANSFER_ABORT,
  408.                         LABT_EscKey,    TRUE,
  409.                         LABT_ExtraFat,    TRUE,
  410.                     TAG_DONE);
  411.  
  412.                     LT_EndGroup(TransferHandle);
  413.                 }
  414.  
  415.                 LT_EndGroup(TransferHandle);
  416.             }
  417.  
  418.             TransferZoomed = FALSE;
  419.  
  420.             if(Window)
  421.             {
  422.                 Bounds . Left    = WindowLeft + Window -> LeftEdge;
  423.                 Bounds . Top    = WindowTop + Window -> TopEdge;
  424.             }
  425.             else
  426.             {
  427.                 Bounds . Left    = WindowLeft;
  428.                 Bounds . Top    = WindowTop;
  429.             }
  430.  
  431.             Bounds . Width    = WindowWidth;
  432.             Bounds . Height    = WindowHeight;
  433.  
  434.             if(TransferWindow = LT_Build(TransferHandle,
  435.                 LAWN_TitleText,        TransferWindowTitle = Title,
  436.                 LAWN_Bounds,        &Bounds,
  437.                 LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  438.                 LAWN_HelpHook,        &GuideHook,
  439. //                LAWN_Parent,        Window,
  440.                 LAWN_Zoom,        TRUE,
  441.                 WA_DepthGadget,        TRUE,
  442.                 WA_CloseGadget,        TRUE,
  443.                 WA_DragBar,        TRUE,
  444.                 WA_RMBTrap,        TRUE,
  445.                 WA_NoCareRefresh,    TRUE,
  446.             TAG_DONE))
  447.             {
  448.                 ULONG    IntuiLock = LockIBase(NULL);
  449.                 BYTE    Activate,Move;
  450.                 LONG    i;
  451.  
  452.                 if(Config -> MiscConfig -> AlertMode == ALERT_SCREEN || Config -> MiscConfig -> AlertMode == ALERT_BEEP_SCREEN)
  453.                     Move = Activate = TRUE;
  454.                 else
  455.                 {
  456.                     Move = Activate = FALSE;
  457.  
  458.                     if(IntuitionBase -> ActiveWindow && IntuitionBase -> ActiveWindow -> UserPort)
  459.                     {
  460.                         struct MsgPort *UserPort = IntuitionBase -> ActiveWindow -> UserPort;
  461.  
  462.                         if(UserPort -> mp_Flags == PA_SIGNAL && UserPort -> mp_SigTask == FindTask(NULL))
  463.                             Activate = TRUE;
  464.                     }
  465.                 }
  466.  
  467.                 if(Config -> TransferConfig -> TransferNotification == XFERNOTIFY_NEVER || Config -> TransferConfig -> TransferNotification == XFERNOTIFY_END)
  468.                     Move = Activate = FALSE;
  469.  
  470.                 UnlockIBase(IntuiLock);
  471.  
  472.                 GuideContext(CONTEXT_TRANSFER);
  473.  
  474.                 if(Move)
  475.                 {
  476.                     if(TransferWindow -> WScreen -> LeftEdge > 0)
  477.                     {
  478.                         if(TransferWindow -> WScreen -> TopEdge > 0)
  479.                             MoveScreen(TransferWindow -> WScreen,-TransferWindow -> WScreen -> LeftEdge,-TransferWindow -> WScreen -> TopEdge);
  480.                         else
  481.                             MoveScreen(TransferWindow -> WScreen,-TransferWindow -> WScreen -> LeftEdge,0);
  482.                     }
  483.                     else
  484.                     {
  485.                         if(TransferWindow -> WScreen -> TopEdge > 0)
  486.                             MoveScreen(TransferWindow -> WScreen,0,-TransferWindow -> WScreen -> TopEdge);
  487.                     }
  488.  
  489.                     WindowToFront(TransferWindow);
  490.  
  491.                     ScreenToFront(TransferWindow -> WScreen);
  492.                 }
  493.  
  494.                 if(Activate)
  495.                     ActivateWindow(TransferWindow);
  496.  
  497.                 PushWindow(TransferWindow);
  498.  
  499.                 for(i = 0 ; i < 6 ; i++)
  500.                 {
  501.                     if(i < 4)
  502.                     {
  503.                         if(i < 2)
  504.                         {
  505.                             LT_SetAttributes(TransferHandle,GAD_TRANSFER_TOTALTIME,
  506.                                 LABX_Index,    i,
  507.                                 LABX_Text,    "-",
  508.                             TAG_DONE);
  509.  
  510.                             LT_SetAttributes(TransferHandle,GAD_TRANSFER_ERRORS,
  511.                                 LABX_Index,    i,
  512.                                 LABX_Text,    "-",
  513.                             TAG_DONE);
  514.                         }
  515.  
  516.                         LT_SetAttributes(TransferHandle,GAD_TRANSFER_FILE,
  517.                             LABX_Index,    i,
  518.                             LABX_Text,    "-",
  519.                         TAG_DONE);
  520.                     }
  521.  
  522.                     LT_SetAttributes(TransferHandle,GAD_TRANSFER_SIZE,
  523.                         LABX_Index,    i,
  524.                         LABX_Text,    "-",
  525.                     TAG_DONE);
  526.  
  527.                     LT_SetAttributes(TransferHandle,GAD_TRANSFER_SECONDS,
  528.                         LABX_Index,    i,
  529.                         LABX_Text,    "-",
  530.                     TAG_DONE);
  531.                 }
  532.  
  533.                 if(Config -> TransferConfig -> PerfMeter && Window)
  534.                 {
  535.                     LONG    Left    = 0,
  536.                         Top    = 0,
  537.                         Width    = 0,
  538.                         Height    = 0;
  539.  
  540.                     GetWindowInfo(WINDOW_PERF,&Left,&Top,&Width,&Height,Window -> Width / 2,Window -> Height / 4);
  541.  
  542.                     if(TransferPerfWindow = OpenWindowTags(NULL,
  543.                         WA_Left,        Left,
  544.                         WA_Top,            Top,
  545.                         WA_Width,        Width,
  546.                         WA_Height,        Height,
  547.                         WA_DragBar,        TRUE,
  548.                         WA_DepthGadget,        TRUE,
  549.                         WA_SizeGadget,        TRUE,
  550.                         WA_SizeBBottom,        TRUE,
  551.                         WA_RMBTrap,        TRUE,
  552.                         WA_NoCareRefresh,    TRUE,
  553.                         WA_CloseGadget,        TRUE,
  554.                         WA_CustomScreen,    Window -> WScreen,
  555.                         WA_Title,        LocaleString(MSG_TERMXPR_TRANSFER_PERFMETER_TXT),
  556.                         WA_MinWidth,        Window -> WScreen -> WBorLeft + 30 + Window -> WScreen -> WBorRight,
  557.                         WA_MinHeight,        Window -> WScreen -> WBorTop + Window -> WScreen -> Font -> ta_YSize + 1 + 20 + Window -> WScreen -> WBorBottom,
  558.                         WA_MaxWidth,        Window -> WScreen -> Width,
  559.                         WA_MaxHeight,        Window -> WScreen -> Height,
  560.                         BackfillTag,        &BackfillHook,
  561.                     TAG_DONE))
  562.                     {
  563.                         extern LONG CPL_Min,CPL_Avg,CPL_Cur;
  564.  
  565.                         CPL_Min = CPL_Avg = CPL_Cur = -1;
  566.  
  567.                         TransferPerfWindow -> UserPort = TransferWindow -> UserPort;
  568.  
  569.                         if(!ModifyIDCMP(TransferPerfWindow,TransferWindow -> IDCMPFlags))
  570.                         {
  571.                             TransferPerfWindow -> UserPort = NULL;
  572.  
  573.                             CloseWindow(TransferPerfWindow);
  574.  
  575.                             TransferPerfWindow = NULL;
  576.                         }
  577.                     }
  578.                 }
  579.  
  580.                 return(TRUE);
  581.             }
  582.  
  583.             LT_DeleteHandle(TransferHandle);
  584.  
  585.             TransferHandle = NULL;
  586.         }
  587.     }
  588.  
  589.     return(FALSE);
  590. }
  591.  
  592.     /* DeleteTransferPanel(BYTE WaitForPrompt):
  593.      *
  594.      *    Close the transfer window.
  595.      */
  596.  
  597. VOID __regargs
  598. DeleteTransferPanel(BYTE WaitForPrompt)
  599. {
  600.         /* Can any pending garbage. */
  601.  
  602.     if(TransferError)
  603.         FlushSerialRead();
  604.  
  605.     if(TransferPerfWindow)
  606.     {
  607.         PutWindowInfo(WINDOW_PERF,TransferPerfWindow -> LeftEdge,TransferPerfWindow -> TopEdge,TransferPerfWindow -> Width,TransferPerfWindow -> Height);
  608.  
  609.         CloseWindowSafely(TransferPerfWindow);
  610.  
  611.         TransferPerfWindow = NULL;
  612.     }
  613.  
  614.         /* Wait for user to close the window? */
  615.  
  616.     if(WaitForPrompt && TransferHandle)
  617.     {
  618.         struct IntuiMessage    *Message;
  619.         BOOLEAN             Done = FALSE;
  620.         ULONG             MsgClass;
  621.         struct Gadget        *MsgGadget;
  622.  
  623.         LT_SetAttributes(TransferHandle,GAD_TRANSFER_SKIP,
  624.             GA_Disabled,    TRUE,
  625.         TAG_DONE);
  626.  
  627.         LT_SetAttributes(TransferHandle,GAD_TRANSFER_ABORT_FILE,
  628.             GA_Disabled,    TRUE,
  629.         TAG_DONE);
  630.  
  631.         do
  632.         {
  633.             if(Wait(PORTMASK(TransferWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  634.                 break;
  635.  
  636.             while(Message = (struct IntuiMessage *)LT_GetIMsg(TransferHandle))
  637.             {
  638.                 MsgClass    = Message -> Class;
  639.                 MsgGadget    = (struct Gadget *)Message -> IAddress;
  640.  
  641.                 LT_ReplyIMsg(Message);
  642.  
  643.                 if(MsgClass == IDCMP_CLOSEWINDOW || (MsgClass == IDCMP_GADGETUP && MsgGadget -> GadgetID == GAD_TRANSFER_ABORT))
  644.                     Done = TRUE;
  645.             }
  646.         }
  647.         while(!Done);
  648.     }
  649.  
  650.     TransferAbortState = 0;
  651.     TransferAbortCount = 0;
  652.  
  653.     TransferError = FALSE;
  654.  
  655.     if(FileTransferInfo)
  656.     {
  657.         FreeFileTransferInfo(FileTransferInfo);
  658.  
  659.         FileTransferInfo = NULL;
  660.     }
  661.  
  662.     if(LastStatus != -1)
  663.         Status = LastStatus;
  664.  
  665.     LastStatus = -1;
  666.  
  667.     if(TransferHandle)
  668.     {
  669.         LT_DeleteHandle(TransferHandle);
  670.  
  671.         TransferHandle = NULL;
  672.     }
  673.  
  674.     if(TransferInfoList . lh_Head -> ln_Succ)
  675.     {
  676.         FreeList(&TransferInfoList);
  677.  
  678.         TransferInfoCount = 0;
  679.     }
  680.  
  681.     TransferWindow = NULL;
  682.  
  683.     ReleaseWindows();
  684. }
  685.